using System;
using System.Collections.Generic;
using Mx.Ipn.Escom.TT20080015.Modelo.Memoria;

namespace Mx.Ipn.Escom.TT20080015.Modelo.Codificacion
{

	public class Parametro
    {
        public static int contador = 0;
        public List<byte> obtenerX(string[] casoEstudio)
        {
            List<byte> trama = new List<byte>();
            //trama.Add((int)getClass(casoEstudio[0]));
            trama.Add((byte)getAge(casoEstudio[1]));
            trama.Add((byte)getMenopause(casoEstudio[2]));
            trama.Add((byte)getTumorSize(casoEstudio[3]));//4
            trama.Add((byte)getInvNodes(casoEstudio[4]));//4
            trama.Add((byte)getNodeCaps(casoEstudio[5]));
            trama.Add((byte)getDegMalig(casoEstudio[6]));
            trama.Add((byte)getBreast(casoEstudio[7]));
            trama.Add((byte)getBreastQuad(casoEstudio[8]));
            trama.Add((byte)getIrradiat(casoEstudio[9]));//1

            return trama;
        }

        public Asociacion obtenerTrama(string []casoEstudio)
        {
            string clase = Codificacion.toString((int)getClass(casoEstudio[0]), 2);//
            string edad = Codificacion.toString((int)getAge(casoEstudio[1]), 4);
            string menopausia = Codificacion.toString((int)getMenopause(casoEstudio[2]), 2);
            string tumor = Codificacion.toString((int)getTumorSize(casoEstudio[3]), 4);
            string invNods = Codificacion.toString((int)getInvNodes(casoEstudio[4]), 4);
            string nodeCaps = Codificacion.toString((int)getNodeCaps(casoEstudio[5]), 2);
            string grado = Codificacion.toString((int)getDegMalig(casoEstudio[6]), 2);
            string seno = Codificacion.toString((int)getBreast(casoEstudio[7]), 2);//
            string cuadrante = Codificacion.toString((int)getBreastQuad(casoEstudio[8]), 3);
            string radiacion = Codificacion.toString((int)getIrradiat(casoEstudio[9]), 2);//
            string trama = edad + menopausia + tumor + invNods + nodeCaps + grado + seno + cuadrante + radiacion;
            return new Asociacion(trama, clase);
        }

        public Asociacion ObtenerTramaGCS(string[] casoEstudio)
        {
            string clase = Codificacion.toString(Codificacion.decToGrayCode((int)getClass(casoEstudio[0])), 2);
            string edad = Codificacion.toString(Codificacion.decToGrayCode((int)getAge(casoEstudio[1])), 4);
            string menopausia = Codificacion.toString(Codificacion.decToGrayCode((int)getMenopause(casoEstudio[2])), 2);
            string tumor = Codificacion.toString(Codificacion.decToGrayCode((int)getTumorSize(casoEstudio[3])), 4);
            string invNods = Codificacion.toString(Codificacion.decToGrayCode((int)getInvNodes(casoEstudio[4])), 4);
            string nodeCaps = Codificacion.toString(Codificacion.decToGrayCode((int)getNodeCaps(casoEstudio[5])), 2);
            string grado = Codificacion.toString(Codificacion.decToGrayCode((int)getDegMalig(casoEstudio[6])), 2);
            string seno = Codificacion.toString(Codificacion.decToGrayCode((int)getBreast(casoEstudio[7])), 2);
            string cuadrante = Codificacion.toString(Codificacion.decToGrayCode((int)getBreastQuad(casoEstudio[8])), 3);
            string radiacion = Codificacion.toString(Codificacion.decToGrayCode((int)getIrradiat(casoEstudio[9])), 2);
            string trama = edad + menopausia + tumor + invNods + nodeCaps + grado + seno + cuadrante + radiacion;
            return new Asociacion(trama, clase);
        }

        public Asociacion ObtenerTramaJM(string[] casoEstudio)
        {
            string clase = Codificacion.convertirJM1((int)getClass(casoEstudio[0]), Codificacion.decToGrayCode((int)Recurrencia.RecurrenceEvents));
            string edad = Codificacion.convertirJM1((int)getAge(casoEstudio[1]), Codificacion.decToGrayCode((int)Age.Range_90_99));
            string menopausia = Codificacion.convertirJM1((int)getMenopause(casoEstudio[2]), Codificacion.decToGrayCode((int)Menopause.Premeno));
            string tumor = Codificacion.convertirJM1((int)getTumorSize(casoEstudio[3]), Codificacion.decToGrayCode((int)TumorSize.Range_55_59));
            string invNods = Codificacion.convertirJM1((int)getInvNodes(casoEstudio[4]), Codificacion.decToGrayCode((int)InvNodes.Range_36_39));
            string nodeCaps = Codificacion.convertirJM1((int)getNodeCaps(casoEstudio[5]), Codificacion.decToGrayCode((int)NodeCaps.No));
            string grado = Codificacion.convertirJM1((int)getDegMalig(casoEstudio[6]), Codificacion.decToGrayCode((int)DegMalig.Three));
            string seno = Codificacion.convertirJM1((int)getBreast(casoEstudio[7]), Codificacion.decToGrayCode((int)Breast.Right));
            string cuadrante = Codificacion.convertirJM1((int)getBreastQuad(casoEstudio[8]), Codificacion.decToGrayCode((int)BreastQuad.Center));
            string radiacion = Codificacion.convertirJM1((int)getIrradiat(casoEstudio[9]), Codificacion.decToGrayCode((int)Irradiat.No));
            string trama = edad + menopausia + tumor + invNods + nodeCaps + grado + seno + cuadrante + radiacion;
            return new Asociacion(trama, clase);
        }

        //    1. Class: no-recurrence-events, recurrence-events
        public static Recurrencia getClass(String valor)
        {
            switch (valor)
            {
                case "no-recurrence-events": return Recurrencia.NoRecurrenceEvents;
                case "recurrence-events": return Recurrencia.RecurrenceEvents;
                default: return Recurrencia.Default;
            }
        }

        //   2. age: 10-19, 20-29, 30-39, 40-49, 50-59, 60-69, 70-79, 80-89, 90-99.
        public static Age getAge(String valor)
        {
            switch (valor)
            {
                case "10-19": return Age.Range_10_19;
                case "20-29": return Age.Range_20_29;
                case "30-39": return Age.Range_30_39;
                case "40-49": return Age.Range_40_49;
                case "50-59": return Age.Range_50_59;
                case "60-69": return Age.Range_60_69;
                case "70-79": return Age.Range_70_79;
                case "80-89": return Age.Range_80_89;
                case "90-99": return Age.Range_90_99;
                default: return Age.Default;
            }
        }

        //   3. menopause: lt40, ge40, premeno.
        public static Menopause getMenopause(String valor)
        {
            switch (valor)
            {
                case "lt40": return Menopause.Lt40;
                case "ge40": return Menopause.Ge40;
                case "premeno": return Menopause.Premeno;
                default: return Menopause.Default;
            }
        }

        //4. tumor-size: 0-4, 5-9, 10-14, 15-19, 20-24, 25-29, 30-34, 35-39, 40-44, 45-49, 50-54, 55-59.
        public static TumorSize getTumorSize(String valor)
        {
            switch (valor)
            {
                case "0-4": return TumorSize.Range_0_4;
                case "5-9": return TumorSize.Range_5_9;
                case "10-14": return TumorSize.Range_10_14;
                case "15-19": return TumorSize.Range_15_19;
                case "20-24": return TumorSize.Range_20_24;
                case "25-29": return TumorSize.Range_25_29;
                case "30-34": return TumorSize.Range_30_34;
                case "35-39": return TumorSize.Range_35_39;
                case "40-44": return TumorSize.Range_40_44;
                case "45-49": return TumorSize.Range_45_49;
                case "50-54": return TumorSize.Range_50_54;
                case "55-59": return TumorSize.Range_55_59;
                default: return TumorSize.Default;
            }
        }

        //    5. inv-nodes: 0-2, 3-5, 6-8, 9-11, 12-14, 15-17, 18-20, 21-23, 24-26, 27-29, 30-32, 33-35, 36-39.
        public static InvNodes getInvNodes(String valor)
        {
            switch (valor)
            {
                case "0-2": return InvNodes.Range_0_2;
                case "3-5": return InvNodes.Range_3_5;
                case "6-8": return InvNodes.Range_6_8;
                case "9-11": return InvNodes.Range_9_11;
                case "12-14": return InvNodes.Range_12_14;
                case "15-17": return InvNodes.Range_15_17;
                case "18-20": return InvNodes.Range_18_20;
                case "21-23": return InvNodes.Range_21_23;
                case "24-26": return InvNodes.Range_24_26;
                case "27-29": return InvNodes.Range_27_29;
                case "30-32": return InvNodes.Range_30_32;
                case "33-35": return InvNodes.Range_33_35;
                case "36-39": return InvNodes.Range_36_39;
                default: return InvNodes.Default;
            }
        }

        //   6. node-caps: yes, no.
        public static NodeCaps getNodeCaps(String valor)
        {
            switch (valor)
            {
                case "yes": return NodeCaps.Yes;
                case "no": return NodeCaps.No;
                default: return NodeCaps.Default;
            }
        }

        //   7. deg-malig: 1, 2, 3.
        public static DegMalig getDegMalig(String valor)
        {
            switch (valor)
            {
                case "1": return DegMalig.One;
                case "2": return DegMalig.Two;
                case "3": return DegMalig.Three;
                default: return DegMalig.Default;
            }
        }

        //   8. breast: left, right.
        public static Breast getBreast(String valor)
        {
            switch (valor)
            {
                case "left": return Breast.Left;
                case "right": return Breast.Right;
                default: return Breast.Default;
            }
        }

        //   9. breast-quad: left-up, left-low, right-up,	right-low, central.
        public static BreastQuad getBreastQuad(String valor)
        {
            switch (valor)
            {
                case "left_up": return BreastQuad.LeftUp;
                case "left_low": return BreastQuad.LeftLow;
                case "right_up": return BreastQuad.RightUp;
                case "right_low": return BreastQuad.RightLow;
                case "central": return BreastQuad.Center;
                default: return BreastQuad.Default;
            }
        }

        //  10. irradiat:	yes, no.
        public static Irradiat getIrradiat(String valor)
        {
            switch (valor)
            {
                case "yes": return Irradiat.Yes;
                case "no": return Irradiat.No;
                default: return Irradiat.Default;
            }
        }
    }
}
